package com.wxzz.elearing.user.service;

import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.service.IService;
import com.wxzz.elearing.user.dto.*;
import com.wxzz.elearing.user.entity.*;
import com.wxzz.elearning.common.vo.JgPageVo;
import com.wxzz.elearning.common.vo.ReturnVO;

import java.util.List;

public interface IDocentService extends IService<Docent> {

    /**
     * 讲师列表(后台/小程序)
     *
     * @param enterpriseId
     * @param docentDto
     * @return
     */
    ReturnVO<JgPageVo<List<Docent>>> listDocent(Long enterpriseId, DocentDto docentDto);

    /**
     * 根据讲师id删除讲师
     *
     * @param docentId
     * @return
     */
    ReturnVO deleteDocentById(Long docentId);

    /**
     * 添加或修改讲师(后台/小程序)
     *
     * @param docentInsDto
     * @return
     */
    ReturnVO sendDocent(DocentInsDto docentInsDto);

    /**
     * 提交讲师申请
     *
     * @param jsonObject
     * @return
     */
    ReturnVO sendDocentApply(JSONObject jsonObject);

    /**
     * 根据用户id查询审核状态
     *
     * @param wxUserId
     * @return
     */
    ReturnVO selectStatus(Long wxUserId);

    /**
     * 讲师申请通过
     *
     * @param passDocentApplyDto
     * @return
     */
    ReturnVO passDocentApply(AdminUser adminUser, PassDocentApplyDto passDocentApplyDto);

    /**
     * 讲师申请失败
     *
     * @param failDocentApplyDto
     * @return
     */
    ReturnVO failDocentApply(AdminUser adminUser, FailDocentApplyDto failDocentApplyDto);

    /**
     * 讲师申请列表
     *
     * @param docentApplyDto
     * @return
     */
    ReturnVO<JgPageVo<List<DocentApply>>> listDocentApply(Long enterpriseId, DocentApplyDto docentApplyDto);

    /**
     * 平台列出全部企业讲师
     *
     * @param docentApplyDto
     * @return
     */
    ReturnVO listDocentAllEnterprise(DocentApplyDto docentApplyDto);

    /**
     * 新增或修改平台讲师(后台)
     *
     * @param docentInsDto
     * @return
     */
    ReturnVO saveDocent(DocentInsDto docentInsDto);

    /**
     * 修改讲师介绍
     *
     * @return
     */
    ReturnVO updateDocentDetail(Docent docent);

    /**
     * 讲师发布试讲(后台)
     *
     * @param docentTrial
     * @return
     */
    ReturnVO saveDocentTrial(DocentTrial docentTrial);

    /**
     * 试讲/晋升内部列表(后台)
     *
     * @param trialType      0-试讲 1-晋升
     * @param docentTrialDto
     * @return
     */
    ReturnVO<JgPageVo<List<DocentTrial>>> listDocentTrial(Integer trialType, DocentTrialDto docentTrialDto);

    /**
     * 试讲/晋升列表(小程序)
     *
     * @param trialType        0-试讲 1-晋升
     * @param wxDocentTrialDto
     * @return
     */
    ReturnVO<JgPageVo<List<DocentTrial>>> wxListDocentTrial(Integer trialType, Long wxUserId, WxDocentTrialDto wxDocentTrialDto);

    /**
     * 试讲/晋升详情(小程序)
     *
     * @param docentTrialId
     * @return
     */
    ReturnVO<DocentTrial> selectDocentTrialDetail(Long docentTrialId);

    /**
     * 讲师工具详情
     *
     * @param docentToolId
     * @return
     */
    ReturnVO<DocentTool> selectDocentToolDetail(Long docentToolId);

    /**
     * 发布至晋升(小程序/后台)
     *
     * @param docentTrialId
     * @return
     */
    ReturnVO sendDocentTrialToPromotion(Long docentTrialId);


    /**
     * 讲师工具列表(小程序/后台)
     *
     * @param docentToolDto
     * @return
     */
    ReturnVO<JgPageVo<List<DocentTool>>> listDocentTool(Long enterpriseId, DocentToolDto docentToolDto);

    /**
     * 添加讲师工具(后台)
     *
     * @param docentTool
     * @return
     */
    ReturnVO saveDocentTool(DocentTool docentTool);

    /**
     * 修改讲师工具(后台)
     *
     * @param docentTool
     * @return
     */
    ReturnVO updateDocentTool(DocentTool docentTool);

    /**
     * 根据讲师id查询讲师信息
     *
     * @param docentId
     * @return
     */
    ReturnVO selectDocentById(Long docentId);

    /**
     * 查询讲师详情
     *
     * @param docentId
     * @return
     */
    ReturnVO<Docent> selectDocentById4mini(Long docentId);

    /**
     * 查询讲师详情
     *
     * @param docentId
     * @return
     */
    ReturnVO<Docent> selectDocentDetail(Long docentId);

    /**
     * 根据讲师id展示我的账户
     *
     * @param docentId
     * @return
     */
    ReturnVO<Docent> selectMyWallet(Long docentId);

    /**
     * 修改晋升状态
     *
     * @param updateDocentTrialDto
     * @return
     */
    ReturnVO updateDocentTrial(UpdateDocentTrialDto updateDocentTrialDto);

    /**
     * 平台讲师总数(远程调用)
     *
     * @return
     */
    Integer countByPlatformDocentNum();

    /**
     * 企业讲师总数(远程调用)
     *
     * @return
     */
    Integer countByEnterpriseDocentNum();

    /**
     * 根据企业id查询讲师数量(远程调用)
     * @param enterpriseId
     * @return
     */
    Integer selectCountByDocent(Long enterpriseId);
}
